#include "BlockQueue.hpp"
#include <pthread.h>
#include <iostream>
#include <unistd.h>

using namespace std;

void* Consumer(void* arg) 
{
    BlockQueue<int>* bq = static_cast<BlockQueue<int>*>(arg);

    while(true) 
    {
        sleep(1);   //消费慢

        int data = bq->pop();
        cout << "消费了一个数据" << data << endl;
    }
}


void* Producer(void* arg) 
{
    BlockQueue<int>* bq = static_cast<BlockQueue<int>*>(arg);

    int data = 0;
    while(true) 
    {
        data++;
        bq->push(data);
        cout << "生产了一个数据" << data << endl;
    }
}

int main() 
{
    BlockQueue<int>* bq = new BlockQueue<int>();        //模板实例化之后，才是类型
    pthread_t c,p;
    pthread_create(&c, nullptr, Consumer, bq);
    pthread_create(&p, nullptr, Producer, bq);

    pthread_join(c, nullptr);
    pthread_join(p, nullptr);
    return 0;
}